﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;


namespace Sinacor.Servico.Bovespa.Movimento.BusinessLogic
{
    public class HistoricoOrdemNegocio : BaseBusinessLogic
    {
        #region Atributos
        private int _erroAtivoNaoInformado = 109805;
        private int _erroBolsaNaoInformada = 109806;
        private int _erroDataOrdemNaoInformada = 109804;
        private int _erroDataPregaoNaoInformada = 109877;

        private ResourceAccess.HistoricoOrdemNegocio _raHistoricoOrdemNegocio = new Sinacor.Servico.Bovespa.Movimento.ResourceAccess.HistoricoOrdemNegocio();
        #endregion
        #region Propriedades
        public int ErroAtivoNaoInformado
        {
            get { return _erroAtivoNaoInformado; }
            set { _erroAtivoNaoInformado = value; }
        }

        public int ErroDataPregaoNaoInformada
        {
            get { return _erroDataPregaoNaoInformada; }
            set { _erroDataPregaoNaoInformada = value; }
        }

        public int ErroBolsaNaoInformada
        {
            get { return _erroBolsaNaoInformada; }
            set { _erroBolsaNaoInformada = value; }
        }

        public int ErroDataOrdemNaoInformada
        {
            get { return _erroDataOrdemNaoInformada; }
            set { _erroDataOrdemNaoInformada = value; }
        }
        #endregion
        #region Métodos
        /// <summary>
        /// Disponibiliza uma lista de Historico de Negocios.
        /// </summary>
        /// <param name="entity"></param>
        public List<BusinessEntity.HistoricoNegocio> ConsultarHistoricoNegocios(BusinessEntity.Parameter.FiltroHistoricoNegocio entity)
        {
            SinacorValidation validation = new SinacorValidation();
            validation.AddValidation<BusinessEntity.Parameter.FiltroHistoricoNegocio>(entity);
            validation.Validate();

            return _raHistoricoOrdemNegocio.ConsultarHistoricoNegocios(entity);
        }

        /// <summary>
        /// Disponibiliza uma lista de Historico de Ordens.
        /// </summary>
        /// <param name="entity"></param>
        public List<BusinessEntity.HistoricoOrdem> ConsultarHistoricoOrdens(BusinessEntity.Parameter.FiltroHistoricoOrdem entity)
        {
            SinacorValidation validation = new SinacorValidation();
            validation.AddValidation<BusinessEntity.Parameter.FiltroHistoricoOrdem>(entity);
            validation.Validate();

            return _raHistoricoOrdemNegocio.ConsultarHistoricoOrdens(entity);
        }

        /// <summary>
        /// Disponibiliza uma lista de Negocios para a Ordem.
        /// </summary>
        /// <param name="entity"></param>
        public List<BusinessEntity.HistoricoNegocio> ConsultarNegociosDaOrdem(BusinessEntity.HistoricoOrdem entity)
        {
            if (entity.DataOrdem == null)
                throw new BusinessException(ErroDataOrdemNaoInformada);
            return _raHistoricoOrdemNegocio.ConsultarNegociosDaOrdem(entity);
        }

        /// <summary>
        /// Disponibiliza uma lista de Ordens para o Negocio.
        /// </summary>
        /// <param name="entity"></param>
        public List<BusinessEntity.HistoricoOrdem> ConsultarOrdensDoNegocio(BusinessEntity.HistoricoNegocio entity)
        {

            if (entity.DataPregao == new DateTime())
                throw new BusinessException(ErroDataPregaoNaoInformada);

            if (string.IsNullOrEmpty(entity.Bolsa))
                throw new BusinessException(ErroBolsaNaoInformada);
            return _raHistoricoOrdemNegocio.ConsultarOrdensDoNegocio(entity);
        }
        #endregion
    }

}